package com.example.todolist.repository

import android.util.Log
import com.example.todolist.database.DAO.TodoDao
import com.example.todolist.database.model.TodoEntity
import com.example.todolist.entity.TodoCategory
import com.example.todolist.entity.TodoOrder
import com.example.todolist.util.LoggerTag
import com.example.todolist.util.LoggerTag.Companion.MAIN_NOTI
import javax.inject.Inject

class TodoRepository @Inject constructor(private val todoDao: TodoDao?) {
    fun getTodoCategoryList(): List<TodoCategory> = todoDao?.getAllTodoHeader() ?: ArrayList()

    fun insert(todo: TodoEntity): Long {
        return todoDao?.insert(todo) ?: 0
    }

    fun update(todo: TodoEntity) {
        todoDao?.update(todo)
    }

    fun delete(vararg todos: TodoEntity) {
        todoDao?.delete(*todos)
    }

//    fun getAllTodoCategory(): List<TodoCategory> {
//        return todoDao?.getAllTodoHeader() ?: ArrayList()
//    }

    fun getMaxOrder(): Int {
        val res = todoDao?.getMaxOrder() ?: 0
        Log.d(LoggerTag.MAIN_CATEGORY, "getMaxOrder:$res ")
        return res
    }

    fun getTodoById(id: Int): TodoEntity {
        return todoDao?.getTodoById(id) ?: TodoEntity(id = -1)
    }

    fun getTodosByCateId(cId: Int): List<TodoCategory> {
        return todoDao?.getTodosByCateId(cId) ?: ArrayList()
    }

    fun updateTodo(todo: TodoEntity) {
        return todoDao?.update(todo) ?: Unit
    }

    fun updateTodoFinish(todoId: Int, isFinish: Boolean) {
        todoDao?.updateTodoFinish(todoId, isFinish) ?: Unit
    }

    fun getAllToDoCnt(): Int {
        return todoDao?.getAllToDoCnt() ?: 0
    }

    fun getFinishToDoCnt(): Int {
        return todoDao?.getFinishToDoCnt() ?: 0
    }

    fun upDrag(from: Int, to: Int) {
        return todoDao?.upDrag(from, to) ?: Unit
    }

    fun downDrag(from: Int, to: Int) {
        return todoDao?.downDrag(from, to) ?: Unit
    }

    fun updateOrders(updateList: List<TodoOrder>) {
        return todoDao?.updateOrders(updateList) ?: Unit
    }

    fun updateIsExpired(todoId: Int, isExpired: Boolean) {
        Log.d(MAIN_NOTI, "updateIsExpired:---->todo:$todoId,isExpired:$isExpired")
        return todoDao?.updateIsExpired(todoId, isExpired) ?: Unit
    }

    fun initTodoExpired() {
        return todoDao?.initTodoExpired() ?: Unit
    }
}